package lv.clientedisqueria.model.usuario;

import java.util.List;

import lv.clientedisqueria.client.ClienteServer;
import lv.clientedisqueria.model.DisqueriaTablaModelo;
import lv.clientedisqueria.model.Modelo;
import lv.mensajeriadisqueria.dto.RolDto;
import lv.mensajeriadisqueria.dto.UsuarioDto;
import lv.mensajeriadisqueria.idomain.IRol;
import lv.mensajeriadisqueria.idomain.IUsuario;
import lv.mensajeriadisqueria.mensaje.Mensaje;

/**
 *	Modelo de usuario
 */
public class UsuarioModel extends Modelo<IUsuario> {

	private final static String PROPERTY_CHANGE_CAMBIAR_USUARIO = "cambiarUsuario";
	private final UsuarioTablaModel usuarioTablaModel;
	
	public UsuarioModel() {
		usuarioTablaModel = new UsuarioTablaModel(this);
	}

	@Override
	public String getPropertyChangeCambio() {
		return PROPERTY_CHANGE_CAMBIAR_USUARIO;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<IUsuario> buscarTodos() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new UsuarioDto());
		return (List<IUsuario>) ClienteServer.getInstance().getObjeto();
	}
	
	@SuppressWarnings("unchecked")
	public List<IRol> buscarRoles(){
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new RolDto());
		return (List<IRol>) ClienteServer.getInstance().getObjeto();
	}

	public void borrar() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.BAJA, usuarioTablaModel.getSeleccionado());
		usuarioTablaModel.remover();
		notificar(Modelo.BORRAR);
	}

	public void insertar() {
		usuarioTablaModel.adherirOModificar(new UsuarioDto());
		notificar(Modelo.INSERTAR);
	}
	public void guardar(IUsuario usuario) {
		if (usuario.getIdUsuario() != null) {
			ClienteServer.getInstance().mandarMensaje(Mensaje.MODIFICAR, usuario);
		} else {
			ClienteServer.getInstance().mandarMensaje(Mensaje.ALTA, usuario);
		}
		IUsuario usuarioDto = (IUsuario)ClienteServer.getInstance().getObjeto();
		usuario.setIdUsuario(usuarioDto.getIdUsuario());
		usuarioTablaModel.adherirOModificar(usuario);
		notificar(Modelo.GUARDADO);
	}

	@Override
	public DisqueriaTablaModelo<IUsuario> getTablaModel() {
		return usuarioTablaModel;
	}
}